/**
 * 柯里化
 * 维基百科:是把接收多个参数的函数，变成接受一个单一参数(最初函数的第一个参数)的函数，并且返回接受余下的参数，而且返回结果的新函数的技术
 * 理解: 只传递给函数一部分参数来调用它，让它返回一个函数去处理剩余的参数，这个过程就叫做柯里化
 * 柯里化是一个过程
 */

//案例
function add(x, y, z) {
  return x + y + z
}

var res = add(10, 20, 30)
console.log(res)

//柯里化
function sum1(x) {
  return function (y) {
    return function (z) {
      return x + y + z
    }
  }
}

var res1 = sum1(10)(20)(30)
console.log(res1)

//使用arrow function进行简写
var bar = x => y => z => x + y + z
var res2 = bar(10)(20)(30)
console.log(res2)

//只要将原本的函数参数分开来进行处理都属于柯里化过程
var bar1 = (x, y) => z => x + y + z
var res3 = bar1(10, 20)(20)
console.log(res3)
